// xlsx表格路径
let inputUrl = './xlsx/';
// 输出路径
let outputUrl = './res';

let fs = require('fs');
const path = require('path');
let xlsxrd = require('node-xlsx');
let xlsxArr = []; //需要转换的文件路径
let DTSData = "";//转换成.d.ts的内容

readXlsx(inputUrl);
// 动态输入
// let inputUrl = process.argv[2];
// let outputUrl = process.argv[3];
console.log('输入路径', path.join(__dirname, inputUrl));
console.log('输出路径', path.join(__dirname, outputUrl));

/**
 * 读取xlsx表格
 * @param xlsxUrl xlsx表格路径 
 */
async function readXlsx(xlsxUrl) {
    await readFileList(path.join(__dirname, xlsxUrl));
    // console.log("目录", xlsxArr);
    for (let d = 0;d < xlsxArr.length;d++) {
        // console.log('需要转换的xlsx表格', xlsxArr[d]);
        let list = xlsxrd.parse(xlsxArr[d]);
        for (let k = 0;k < list.length;k++) {
            let name = list[k].name;
            // console.log('表格名字', name);
            //如果表格名字前带#说明要跳过这个数据
            if (name == "Sheet1" || name.substr(0, 1) == "#") {
                // console.log('跳过', name);
                break;
            }
            let dataList = list[k].data;
            let title = dataList[0];//key
            let notes = dataList[1];//notes //注释
            let val = dataList[2];//val
            // console.log("title", title);
            DTSData += `interface ${name} {\r`;
            for (let i = 0;i < title.length;i++) {
                let currentTitle = title[i];
                if (currentTitle.substr(0, 1) == "#") {
                    // console.log("跳过", titleName);
                    continue;
                }
                let currentNotes = notes[i];
                console.log(currentNotes);
                DTSData += `    /** ${currentNotes} */\r`;
                DTSData += `    ${currentTitle}: ${val[i]},\r`;
            }
            let resultData = [];
            for (let i = 3;i < dataList.length;i++) {
                let obj = {};
                for (let s = 0;s < title.length;s++) {
                    let titleName = title[s];
                    let data = dataList[i][s];
                    //如果数据名字前带#说明要跳过这个数据
                    if (titleName.substr(0, 1) == "#") {
                        // console.log("跳过", titleName);
                        continue;
                    }
                    //判断是否有值
                    if (!data && data !== 0) {
                        // console.error("没有值");
                        obj[title[s]] = '';
                    } else {
                        // console.log("有值",data);
                        //全部转换成字符串
                        // obj[title[s]] = data + '';
                        obj[title[s]] = data;
                    }
                }
                resultData.push(obj);
            }
            DTSData += `}\r`;

            // createrTS(name, resultData);
            createrJson(name, resultData);
        }
    }
    createrDTS("JsonData", DTSData);
}

/**
 * 递归检测出所有资源
 * @param url 目标路径
 */
function readFileList(url) {
    const stat = fs.statSync(url);
    console.log(url);
    if (stat.isDirectory()) {
        // this.logInfo('文件夹');
        let files = fs.readdirSync(url, "utf-8");
        files = files.filter((file) => {
            return !file.endsWith(".meta");
        });
        // console.log(files);
        files.forEach((item, index) => {
            var fullPath = path.join(url, item);
            const stat = fs.statSync(fullPath);
            if (stat.isDirectory()) {
                //如果文件夹内还包含文件夹，那么继续读取这个文件夹内的内容
                readFileList(path.join(url, item));  //递归读取文件
            } else {
                detectionType(fullPath);
            }
        });
    } else {
        // this.logInfo('文件');
        detectionType(url);
        return;
    }
}

//检测文件类型
function detectionType(url) {
    if (url.endsWith(".xlsx")) {
        xlsxArr.push(url);
    }
}

/**
 * 创建json文件
 * @param name 脚本名称 
 * @param data 脚本数据
 */
function createrJson(name, data) {
    fs.writeFile(`${outputUrl}/${name}.json`, `${JSON.stringify(data)}`, function (err) {
        if (err) {
            return console.log(`${name}.json文件转换失败`, err);
        }
        console.log(`${name}.json文件转换完成`);
    });
}

/**
 * 创建ts文件
 * @param name 脚本名称 
 * @param data 脚本数据
 */
function createrTS(name, data) {
    fs.writeFile(`${outputUrl}/${name}.ts`, `export default ${JSON.stringify(data)}`, function (err) {
        if (err) {
            return console.log(`${name}.ts文件转换失败`, err);
        }
        console.log(`${name}.ts文件转换完成`);
    });
}

/**
 * 创建.d.ts文件
 * @param name 脚本名称 
 * @param data 脚本数据
 */
function createrDTS(name, data) {
    fs.writeFile(`${outputUrl}/${name}.d.ts`, `${data}`, function (err) {
        if (err) {
            return console.log(`${name}.d.ts文件转换失败`, err);
        }
        console.log(`${name}.d.ts文件转换完成`);
    });
}